parser grammar AnalisisParser;

options {
  language = Java;
  tokenVocab = AnalisisLexer;
}

@header{
  package practicaspl.nueve;
 
}

@members{
  int libro = 0;
  boolean noauthor = false;
  private ArrayList<RecognitionException> errors = new ArrayList<RecognitionException>();
  public ArrayList<RecognitionException> getErrors() {
    return errors;
  }
  @Override
  public void reportError (RecognitionException e) {
     String msg = getErrorMessage(e, getTokenNames());
     System.err.println(msg);
     errors.add(e);
  }
  
}


entradaxml: etiquetas+;

etiquetas : AETIQ_O i=IDENT{if (i.getText().equals("autor")) {noauthor = true;} 
if(i.getText().equals("libro")) {libro += 1;}}  CETIQUETA aux2 AETIQ_C i1=IDENT{if (i1.getText().equals("libro")){libro -= 1;}} CETIQUETA
{
    if((i1.getText().equals("libro"))&&(!noauthor)){ 
      System.out.println("El libro no contiene autor");
      throw new RecognitionException();
    }
    if(!i.getText().equals(i1.getText()))
    {
      System.out.println("Las etiquetas no son iguales");
      throw new RecognitionException();
    }
    if(libro == 0){ 
      noauthor = false;
    }
};


aux2 : (STRING|etiquetas*);
